/**
 * 会员充值页面类
 * 业务层级：表示层
 * 功能说明：提供会员充值功能界面，包括会员选择、充值金额输入、充值处理和结果展示
 * 架构关系：遵循四层架构设计，调用Service层处理充值业务逻辑
 */
#ifndef MEMBERRECHARGEPAGE_H
#define MEMBERRECHARGEPAGE_H

#include <QWidget>
#include <QVBoxLayout>
#include <QHBoxLayout>
#include <QGridLayout>
#include <QLabel>
#include <QLineEdit>
#include <QPushButton>
#include <QTableWidget>
#include <QHeaderView>
#include <QGroupBox>
#include <QSpinBox>
#include <QDoubleSpinBox>
#include <QTextEdit>
#include <QMessageBox>
#include <QTimer>
#include <QProgressBar>
#include <QFrame>
#include "../services/memberservice.h"
#include "../database/database.h"

class MemberRechargePage : public QWidget
{
    Q_OBJECT

public:
    explicit MemberRechargePage(Database *db, QWidget *parent = nullptr);
    ~MemberRechargePage();

    // 刷新页面数据
    void refreshPage();

private slots:
    // 会员选择变更
    void onMemberSelectionChanged();
    
    // 充值金额变更
    void onRechargeAmountChanged();
    
    // 执行充值操作
    void onRechargeButtonClicked();
    
    // 重置表单
    void onResetButtonClicked();
    
    // 移除充值历史功能
    
    // 搜索会员
    void onSearchMember();

private:
    // 初始化界面
    void initializeUI();
    
    // 创建会员选择区域
    QGroupBox* createMemberSelectionGroup();
    
    // 创建充值信息区域
    QGroupBox* createRechargeInfoGroup();
    
    // 创建操作按钮区域
    QWidget* createButtonArea();
    
    // 创建会员信息显示区域
    QGroupBox* createMemberInfoGroup();
    
    // 加载会员列表
    void loadMemberList();
    
    // 填充会员表格
    void populateMemberTable(const QVector<QMap<QString, QVariant>> &memberList);
    
    // 更新会员信息显示
    void updateMemberInfo(int memberId);
    
    // 计算充值后等级变化
    void calculateLevelChange();
    
    // 验证充值表单
    bool validateRechargeForm();
    
    // 处理充值成功
    void handleRechargeSuccess(const QString &message);
    
    // 处理充值失败
    void handleRechargeError(const QString &error);
    
    // 设置界面样式
    void setUIStyles();
    
    // 重置表单
    void resetForm();
    
    // 将页面白色字体修改为黑色
    void updateTextColorsToBlack();

private:
    Database *m_db;
    MemberService *m_memberService;
    
    // 主布局
    QVBoxLayout *m_mainLayout;
    
    // 会员选择区域相关组件
    QGroupBox *m_memberSelectionGroup;
    QLineEdit *m_searchEdit;
    QPushButton *m_searchButton;
    QTableWidget *m_memberTable;  // 替换下拉框为表格显示
    
    // 充值信息区域
    QGroupBox *m_rechargeInfoGroup;
    QDoubleSpinBox *m_rechargeAmountSpinBox;
    QLineEdit *m_remarkEdit;
    
    // 会员信息显示区域
    QGroupBox *m_memberInfoGroup;
    QLabel *m_memberNameLabel;
    QLabel *m_memberPhoneLabel;
    QLabel *m_currentLevelLabel;
    QLabel *m_currentBalanceLabel;
    QLabel *m_totalRechargedLabel;
    QLabel *m_predictedLevelLabel;
    
    // 操作按钮
    QPushButton *m_rechargeButton;
    QPushButton *m_resetButton;
    // 移除充值历史按钮
    
    // 当前选中的会员ID
    int m_currentMemberId;
    
    // 会员数据缓存
    QVector<QMap<QString, QVariant>> m_memberList;
};

#endif // MEMBERRECHARGEPAGE_H